package com.example.demo.dao;

import com.example.demo.model.Userinfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper //数据持久层标志
public interface UserMapper {
    //1、查询操作
    List<Userinfo> getAll();

    //mybatis传递参数查询
    Userinfo getUserById(@Param("id")Integer id);

    //“#{}”是预编译执行模式，执行安全防止sql注入；
    //“${}”是即时执行模式，是直接替换，不安全存在sql注入
    Userinfo login(@Param("username")String username,@Param("password")String password);

    //${}适用场景，当业务需要传递sql命令是只能使用${}，且需要能被穷举
    List<Userinfo> getAllByOrder(@Param("myOrder")String myorder);

    //2、删除操作
    int delById(@Param("id")Integer id);

    //3、修改
    int update(Userinfo userinfo);

    //4、添加
    int add(Userinfo userinfo);

    //添加，返回自增ID
    int insert(Userinfo userinfo);

    //5、like查询,使用concat拼接
    List<Userinfo> getLikeList(@Param("username")String username);

    //多线程+拼接
    @Select("select * from userinfo where id=#{id}")
    Userinfo getUserById2(@Param("id")Integer id);

    //id标签
    int add2(Userinfo userinfo);

    //trim标签
    int add3(Userinfo userinfo);

    //where标签
    //1、可以根据标签中的内容决定是否生成where关键字
    //2、可以自动去除最前面的and关键字
    //可以用trim代替where
    List<Userinfo> getListByWhere(Userinfo userinfo);

    //set标签
    //可以用trim代替
    int update2(Userinfo userinfo);

    //foreach
    int delByIds(List<Integer> ids);
}
